package jmine.tec.persist.schema.api;

/**
 * Interface de parsers de elementos do schema. Os parsers devem ser capazes de ler schemas gerados pelo Hibernate utilizando o dialeto
 * Oracle10gDialect, assim como schemas gerados pela própria ferramenta de geração de schema utilizando o dialeto equivalente. Parsers devem
 * ser stateless.
 * 
 * @author lundberg
 * @param <S> tipo de elemento gerado pelo parser.
 */
public interface SchemaElementParser<S extends SchemaElement> {

    /**
     * Efetua a leitura do statement, retornando o elemento resultante.<br>
     * Resulta em IllegalArgumentException caso o statement não seja válido para o parser.
     * 
     * @param statement string contendo o statement de criação do elemento.
     * @return elemento resultante do parse.
     */
    S parse(String statement);

    /**
     * Verifica se este é realmente o parser responsável pelo processamento do statement.
     * 
     * @param statement statement
     * @return true caso seja esse o parser, false caso contrário
     */
    boolean matches(String statement);
}
